# -*- coding: utf-8 -*-
"""
项目名称：cotton_test
文件名称：accuracy.py
创建时间：2025-06-08 20:47:50

系统用户：wyl
作　　者：無以菱
联系邮箱：huangjing2001.guet@qq.com
功能描述：准确率计算工具模块
- 本模块提供了用于计算模型预测准确率的函数。
- 在训练和评估过程中用于监控模型性能。
"""


import torch

def accuracy(predictions, labels):
    """
    计算模型预测的准确率
    
    该函数计算分类模型预测结果的准确性，返回正确预测的样本数和总样本数。
    准确率可以通过返回值计算：正确预测数 / 总样本数
    
    参数:
        predictions (torch.Tensor): 模型的原始预测输出，形状为 [batch_size, num_classes]
                                   包含每个样本对每个类别的预测分数/概率
        labels (torch.Tensor): 真实标签，形状为 [batch_size]
                              每个元素是样本的真实类别索引
        
    返回:
        tuple: (正确预测的数量, 总样本数)
               可以用于计算准确率: accuracy = rights / total
    """
    # 获取每个样本最大概率对应的类别索引（预测的类别）
    # predictions.data 获取张量数据
    # torch.max(..., 1) 沿着第1维（类别维度）找最大值
    # [1] 获取最大值的索引（即预测的类别）
    pred = torch.max(predictions.data, 1)[1]
    
    # 计算预测正确的样本数量
    # pred.eq(labels.data.view_as(pred)) 比较预测类别和真实类别是否相等
    # .sum() 计算相等（预测正确）的样本总数
    rights = pred.eq(labels.data.view_as(pred)).sum()
    
    # 返回正确预测的样本数和总样本数
    return rights, len(labels) 